<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>49. 字母异位词分组</title>
  </head>
  <body>
    <script>
      //     给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

      // 字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。

      //

      // 示例 1:

      // 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
      // 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
      // 示例 2:

      // 输入: strs = [""]
      // 输出: [[""]]
      // 示例 3:

      // 输入: strs = ["a"]
      // 输出: [["a"]]

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/group-anagrams
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {string[]} strs
       * @return {string[][]}
       */
      // 老暴力解法了
      var groupAnagrams = function (strs) {
        const arr = [] // 定义一个新数组 arr
        for (let i = 0; i < strs.length; i++) {
          // 遍历传进来的数组，将每一项拆开为数组后按字母排序再变回字符串传入新数组 arr
          arr.push(
            strs[i]
              .split('')
              .sort((a, b) => a.localeCompare(b))
              .join('')
          )
        }
        const res = new Map() // 定义一个哈希表 res
        // debugger
        for (let i = 0; i < arr.length; i++) {
          // 遍历 arr 数组，以每个字符项作为 res 哈希的 key, 保存的 value 为对应 i 值的 strs 数组项 strs[i]
          if (res.get(arr[i])) {
            // 能通过 arr[i] 作为 key 值获取值，将当前的 value 添加进 str[i]
            const l = res.get(arr[i])
            l.push(strs[i])
            res.set(arr[i], l)
          } else {
            // 当前字符项 arr[i] 从未设为 res 的 key 值，进行设置保存
            res.set(arr[i], [strs[i]])
          }
        }
        // const resArr = [] // 创建一个结果数组
        // res.forEach((val) => {
        //   // 遍历哈希表 res ，将 value 值添加进数组 resArr
        //   resArr.push(val)
        // })
        return Array.from(res.values())
      }
      const test = groupAnagrams(['eat', 'tea', 'tan', 'ate', 'nat', 'bat'])
      console.log(test)
    </script>
  </body>
</html>
